/*
题目: 排队
将队伍中的男同学排到一起，女同学排到一起。

排队调换规则：只能挨个调换位置，不能跨越调换。
我们用B字母代表男同学，用G字母代表女同学
输入一行只包含B和G的字符串（即男女同学排队领取奖品），使用你熟悉语言编程的方式计算出最少需要多少次调换才能将男同学和女同学分开排好吗？
https://www.nowcoder.com/questionTerminal/c3ca121da9b44101919929b77514e0ad
 */
public class Lineup {
    public int lineup (String peoples) {
        // 贪心思想, 要么把所有男生放在左边, 要么把所有女生放在左边
        int prevBoy = 0, prevGirl = 0; // 将男生放到前面 和 女生放到前面的进度
        int sumBoy = 0, sumGirl = 0; // 把男/女 移到前面总共需要的步数

        int n = peoples.length();
        for (int i = 0; i < n; i ++) {
            if (peoples.charAt(i) == 'G') { // 如果是女孩
                sumGirl += i - prevBoy;
                prevBoy ++;
            } else { // 如果是男孩, 把男的放在前面
                sumBoy += i - prevGirl;
                prevGirl ++;
            }
        }

        return Math.min(sumBoy, sumGirl);
    }
}
